/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sni.org.pe.seguridad;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.primefaces.component.selectonemenu.SelectOneMenu;
import sni.org.pe.model.Perfil;
import sni.org.pe.model.Usuario;
import sni.org.pe.session.remote.PerfilSessionEJBRemote;
import sni.org.pe.session.remote.UsuarioSessionEJBRemote;
import sni.org.pe.utilitario.ServiceLocator;
import sni.org.pe.utilitario.UParametro;
import sni.org.pe.utilitario.UProperties;

/**
 *
 * @author Ericson
 */
@ManagedBean(name = "mbgusuario")
@ViewScoped
public class MBGUsuario implements Serializable {

    private ServiceLocator sLocator;
    private FacesContext fc;
    private PerfilSessionEJBRemote ejbPerfil;
    private UsuarioSessionEJBRemote ejbUsuario;
    private List<SelectItem> listPerfil;
    private List<Usuario> listUsuario;
    private SelectOneMenu lstPerfil;
    private Usuario userSelected;
    private SelectOneMenu estadoUsuario;
    private String nombreUsuario;
    private String usuarioUsuario;
    private SelectOneMenu lstNPerfil;

    public MBGUsuario() {
        fc = FacesContext.getCurrentInstance();
        sLocator = new ServiceLocator();
        ejbPerfil = (PerfilSessionEJBRemote) sLocator.findServiceRemote(UProperties.getMessage(UParametro.RUTA_JNDI, "PERFIL"));
        ejbUsuario = (UsuarioSessionEJBRemote) sLocator.findServiceRemote(UProperties.getMessage(UParametro.RUTA_JNDI, "USUARIO"));
        if (userSelected == null) {
            userSelected = new Usuario();
            userSelected.setIdperfil(new Perfil());
        }
        List<Perfil> lPerfil = ejbPerfil.findAll();
        if (lPerfil != null && !lPerfil.isEmpty()) {
            listPerfil = new ArrayList<SelectItem>();
            SelectItem s = new SelectItem(-1, "-- Todos --");
            listPerfil.add(s);
            for (Perfil p : lPerfil) {
                SelectItem si = new SelectItem(p.getIdperfil(), p.getNombreperfil());
                listPerfil.add(si);
            }
        }
    }

    /**
     * @return the listPerfil
     */
    public List<SelectItem> getListPerfil() {
        return listPerfil;
    }

    /**
     * @param listPerfil the listPerfil to set
     */
    public void setListPerfil(List<SelectItem> listPerfil) {
        this.listPerfil = listPerfil;
    }

    /**
     * @return the lstPerfil
     */
    public SelectOneMenu getLstPerfil() {
        return lstPerfil;
    }

    /**
     * @param lstPerfil the lstPerfil to set
     */
    public void setLstPerfil(SelectOneMenu lstPerfil) {
        this.lstPerfil = lstPerfil;
    }

    /**
     * @return the listUsuario
     */
    public List<Usuario> getListUsuario() {
        return listUsuario;
    }

    /**
     * @param listUsuario the listUsuario to set
     */
    public void setListUsuario(List<Usuario> listUsuario) {
        this.listUsuario = listUsuario;
    }

    /**
     * @return the userSelected
     */
    public Usuario getUserSelected() {
        return userSelected;
    }

    /**
     * @param userSelected the userSelected to set
     */
    public void setUserSelected(Usuario userSelected) {
        this.userSelected = userSelected;
    }

    public void buscar() {
        int idperfil = Integer.parseInt(lstPerfil.getValue().toString());
        int estado = Integer.parseInt(estadoUsuario.getValue().toString());
        listUsuario = ejbUsuario.getUsuarios(usuarioUsuario, nombreUsuario, idperfil, estado);
        if (listUsuario == null || listUsuario.isEmpty()) {
            String nombreVentana = UProperties.getMessage(UParametro.RUTA_MENSAJES, "WARNING_MESSAGE");
            String mensajeVentana = UProperties.getMessage(UParametro.RUTA_MENSAJES, "BUSQUEDA_USUARIO_EMPTY");
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_WARN, nombreVentana, mensajeVentana);
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void nuevoUsuario() {
        userSelected = new Usuario();
    }

    /**
     * @return the nombreUsuario
     */
    public String getNombreUsuario() {
        return nombreUsuario;
    }

    /**
     * @param nombreUsuario the nombreUsuario to set
     */
    public void setNombreUsuario(String nombreUsuario) {
        this.nombreUsuario = nombreUsuario;
    }

    /**
     * @return the usuarioUsuario
     */
    public String getUsuarioUsuario() {
        return usuarioUsuario;
    }

    /**
     * @param usuarioUsuario the usuarioUsuario to set
     */
    public void setUsuarioUsuario(String usuarioUsuario) {
        this.usuarioUsuario = usuarioUsuario;
    }

    /**
     * @return the estadoUsuario
     */
    public SelectOneMenu getEstadoUsuario() {
        return estadoUsuario;
    }

    /**
     * @param estadoUsuario the estadoUsuario to set
     */
    public void setEstadoUsuario(SelectOneMenu estadoUsuario) {
        this.estadoUsuario = estadoUsuario;
    }

    /**
     * @return the lstNPerfil
     */
    public SelectOneMenu getLstNPerfil() {
        return lstNPerfil;
    }

    /**
     * @param lstNPerfil the lstNPerfil to set
     */
    public void setLstNPerfil(SelectOneMenu lstNPerfil) {
        this.lstNPerfil = lstNPerfil;
    }

    public void guardarUsuario() {
        Perfil p = new Perfil();
        p.setIdperfil(new BigDecimal(lstNPerfil.getValue().toString()));
        userSelected.setIdperfil(p);
        userSelected = ejbUsuario.persistUsuario(userSelected);

        if (userSelected != null) {
            String nombreVentana = UProperties.getMessage(UParametro.RUTA_MENSAJES, "CONFIRMATION_MESSAGE");
            String mensajeVentana = UProperties.getMessage(UParametro.RUTA_MENSAJES, "REGISTRO_USUARIO_OK");
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, nombreVentana, mensajeVentana);
            FacesContext.getCurrentInstance().addMessage(null, msg); 
            if (listUsuario == null) {
                listUsuario = new ArrayList<Usuario>();
            }
            listUsuario.add(userSelected);
        } else {
            String nombreVentana = UProperties.getMessage(UParametro.RUTA_MENSAJES, "ERROR_MESSAGE");
            String mensajeVentana = UProperties.getMessage(UParametro.RUTA_MENSAJES, "REGISTRO_USUARIO_FAIL");
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, nombreVentana, mensajeVentana);
            FacesContext.getCurrentInstance().addMessage(null, msg); 
        }

    }
}
